from PIL import Image
from io import BytesIO
import requests
# todo 打开图像文件
# im = Image.open('cat.jpg')
# 从文件流中打开图像
# r = requests.get('http://f.hiphotos.baidu.com/image/pic/item/b151f8198618367aa7f3cc7424738bd4b31ce525.jpg')
# im2 = Image.open(BytesIO(r.content))
# 展示图像
# im.show()
# im2.show()
# 翻转90度展示
# im.rotate(90).show()

# todo 创建图像
# im = Image.new('RGB', (450, 450), (255, 0, 0))
# im.show()
# im1 = Image.new('RGB', (450, 450), 'red')
# im1.show()
# im2 = Image.new('RGB', (450, 450), '#FF0000')
# im2.show()

# todo 转换格式
# 加载 cat.jpg
# im = Image.open('cat.jpg', 'r')
# # 打印图片类型
# print(im.format)
# # 保存为 png 类型图片
# im.save('cat.png')
# # 加载新保存的 png 类型图片
# im2 = Image.open('cat.png', 'r')
# # 打印新保存图片类型
# print(im2.format)

# todo 创建缩略图
# 加载图像
# im = Image.open('cat.png')
# 展示图像
# im.show()
# 图像尺寸
# size = 128, 128
# # 缩放图像
# im.thumbnail(size, Image.ANTIALIAS)
# # 展示图像
# im.show()

# todo 融合图像
# 蓝色图像
# image1 = Image.new('RGB', (128, 128), (0, 0, 255))
# # 红色图像
# image2=Image.new('RGB', (128, 128), (255, 0, 0))
# # 取中间值
# im = Image.blend(image1, image2, 0.5)
# image1.show()
# image2.show()
# # 显示紫色图像
# im.show()

# todo 像素点处理
# im = Image.open('cat.jpg')
# im.show()
#
# # 将每个像素值翻倍（相当于亮度翻倍）
# evl1 = Image.eval(im, lambda x: x*2)
# evl1.show()
# # 将每个像素值减半（相当于亮度减半）
# evl2 = Image.eval(im, lambda x: x/2)
# evl2.show()

# todo 合成图像
# 打开 cat.png
# image1 = Image.open('cat.png')
# # 打开 flower.jpg
# image2 = Image.open('flower.jpg')
# # 分离image1的通道
# r, g, b = image1.split()
# # 合成图像，获得 cat + flower
# im = Image.composite(image1, image2, mask=b)
# image1.show()
# image2.show()
# im.show()

# todo 通过单通道创建图像
im = Image.open('cat.png')
# 将三个通道分开
im_split = im.split()

# 分别显示三个单通道图像
# im_split[0].show()
# im_split[1].show()
# im_split[2].show()

# 将三个通道再次合并
# im2 = Image.merge('RGB', im_split)
# im2.show()

# 打开第二张图像
# im3 = Image.open('flower.png')
# # 将第二张图像的三个通道分开
# im_split2 = im3.split()
#
# # 将第二张图像的第1个通道和第一张图像的第2、3通道合成一张图像  注意：2张图片的大小必须一样
# rgbs = [im_split2[0], im_split[1], im_split[2]]
# im4 = Image.merge('RGB', rgbs)
# im4.show()

# 参考：https://www.osgeo.cn/pillow/reference/